home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / CONTROLLOOP.s < prev    next >
Text File  |  1995-09-15  |  47KB  |  2,401 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'AB3D1:includes/titlescrnraw',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'AB3D2:includes/titlescrnraw',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43.  
  44.  
  45.  
  46. ProtValA: dc.l 0
  47. ProtValB: dc.l 0
  48. ProtValC: dc.l 0
  49. ProtValD: dc.l 0
  50. ProtValE: dc.l 0
  51. ProtValF: dc.l 0
  52. ProtValG: dc.l 0
  53. ProtValH: dc.l 0
  54. ProtValI: dc.l 0
  55. ProtValJ: dc.l 0
  56. ProtValK: dc.l 0
  57. ProtValL: dc.l 0
  58. ProtValM: dc.l 0
  59. ProtValN: dc.l 0
  60.  
  61.  
  62. KVALTOASC:
  63.         Dc.b    " `  "," 1  "," 2  "," 3  "
  64.         dc.b    " 4  "," 5  "," 6  "," 7  "
  65.         dc.b    " 8  "," 9  "
  66.         Dc.b    " 0  "," -  "," +  "," \  "
  67.         dc.b     '    ','    '," Q  "," W  "
  68.         dc.b    " E  "," R  "
  69.         Dc.b    " T  "," Y  "," U  "," I  "
  70.         dc.b    " O  "," P  "," [  "," ]  "
  71.         dc.b    '    ','KP1 '
  72.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  73.         dc.b    " D  "," F  "," G  "," H  "
  74.         dc.b    " J  "," K  "
  75.         Dc.b    " L  "," ;  "," #  ",'    '
  76.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  77.         dc.b    '    '," Z  "
  78.         Dc.b    " X  "," C  "," V  "," B  "
  79.         dc.b    " N  "," M  "," ,  "," .  "
  80.         dc.b     " /  ",'    '
  81.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  82.         dc.b    'SPC ','<-- ','TAB ','ENT '
  83.         dc.b    'RTN ','ESC '
  84.         Dc.b    'DEL ','    ','    ','    '
  85.         dc.b    'KP- ','    ','UCK ','DCK '
  86.         dc.b    'RCK ','LCK '
  87.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  88.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  89.         dc.b    'FK9 ','FK0 '
  90.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  91.         dc.b    'KP+ '
  92.         dc.b    'HLP ','LSH ','RSH '
  93.         dc.b    'CPL ','CTL '
  94.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  95.         dc.b    '    ','    ','    ','    '
  96.         dc.b    '    ','    '
  97.         Dc.b    '    ','    ','    ','    '
  98.         dc.b    '    ','    ','    ','    '
  99.         dc.b    '    ','    '
  100.  
  101.  even
  102.  
  103. FINISHEDLEVEL: dc.w 0
  104.  
  105.  
  106. START:
  107.  
  108.  move.b #'n',mors
  109.  
  110.   
  111.  
  112. ************************************88
  113. * TAKE OUT WHEN PLAYING MODULE AGAIN
  114. ********************************
  115. ProtChkBLev1:
  116.     PRSDF
  117.     PRSDE
  118. ************************************
  119.  
  120. ; move.l #PROTCALLENC,a0
  121. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  122. ; move.l #$75055345,d0
  123. ;codeitup:
  124. ; sub.l d0,(a0)+
  125. ; ror.l #1,d0
  126. ; dbra d1,codeitup
  127. ; rts
  128.  
  129. ProtChkCLev1:
  130.  PRSDA
  131.  
  132.  move.w #$7201,titleplanes
  133.  
  134.  move.l 4.w,a6
  135.  move.l #doslibname,a1
  136.  moveq #0,d0
  137.  jsr -552(a6)
  138.  move.l d0,doslib
  139.  PRSDS
  140.  jsr stuff
  141.  
  142.  jsr _InitLowLevel
  143.  
  144.  jsr CLEARTITLEPAL
  145.  
  146. ProtChkDLev1:
  147.  PRSDT
  148.  
  149.  move.w #$20,$dff1dc
  150.  move.l #titlecop,$dff080
  151.  PRSDV
  152.  move.w #$87c0,$dff000+dmacon
  153.  move.w #$8020,$dff000+dmacon
  154. ProtChkMLev1:
  155.  move.w $dff006,d0
  156.  lea RVAL2-100(pc),a0
  157.  add.w d0,100(a0)
  158.  
  159.  bsr GETTITLEMEM
  160. ProtChkELev1:
  161.  PRSDU
  162.  bsr CLROPTSCRN
  163.  
  164.  bsr SETUPTITLESCRN
  165.  
  166. ; jsr _InitPlayer
  167.  
  168. ; move.l #INTROTUNENAME,a0
  169. ; jsr _LoadModule
  170. ; move.l d0,INTROTUNEADDR
  171.  PRSDY
  172. ; move.l d0,a0
  173. ; jsr _InitModule
  174.  
  175. ; move.l INTROTUNEADDR,a0
  176. ; jsr _PlayModule
  177. ProtChkFLev1:
  178.  PRSDa
  179.  bsr LOADTITLESCRN
  180.  
  181.  move.w #0,FADEVAL
  182.  move.w #63,FADEAMOUNT
  183.  bsr FADEUPTITLE
  184.  PRSDB
  185.  jsr LOADWALLS
  186.  jsr LOADFLOOR
  187.  jsr LOADOBS
  188.  PRSDZ
  189.  
  190.  move.w #31,FADEAMOUNT
  191.  PRSDC
  192.  bsr FADEDOWNTITLE 
  193.  
  194.  IFEQ CD32VER 
  195.  bsr ASKFORDISK
  196.  ENDC
  197.  IFNE CD32VER
  198.  PRSDD
  199.  ENDC
  200.  
  201.  jsr LOAD_SFX
  202. ; jsr _StopPlayer
  203.  PRSDW
  204.  PRSDX
  205. ; jsr _RemPlayer
  206.  
  207.  
  208.  IFNE CD32VER
  209.  move.l doslib,a6
  210.  move.l #115,d1
  211.  jsr -198(a6)
  212.  ENDC
  213.  
  214. ; move.l #newblag,$80
  215. ; trap #0
  216. ; bra JUMPPASTIT
  217. ; rts
  218. ;
  219. ;newblag:
  220.  
  221.  
  222. ProtChkGLev1:
  223. ; bsr PROTSETUP
  224.  bsr DEFAULTGAME
  225.  
  226. ; move.l INTROTUNEADDR,a0
  227. ; jsr _UnLoadModule
  228.  
  229. ; IFEQ CD32VER
  230. ; jsr KInt_Init
  231. ; ENDC
  232. ProtChkHLev1:
  233. ; rte
  234. ;
  235. ;JUMPPASTIT:
  236.  
  237. BACKTOMENU:
  238.  
  239.  jsr CLEARKEYBOARD
  240.  
  241.  cmp.b #'s',mors
  242.  beq.s BACKTOSLAVE
  243.  cmp.b #'m',mors
  244.  beq.s BACKTOMASTER
  245.  bsr READMAINMENU
  246.  bra DONEMENU
  247. BACKTOMASTER:
  248.  bsr MASTERMENU
  249.  bra DONEMENU
  250. BACKTOSLAVE:
  251.  bsr SLAVEMENU
  252. DONEMENU:
  253.  
  254.  bsr WAITREL
  255.  
  256. ; IFEQ CD32VER
  257. ; move.l OLDKINT,$68.w
  258. ; ENDC
  259.  
  260.  bsr CLRSPRITES
  261.  
  262.  move.w #31,FADEAMOUNT
  263.  bsr FADEUPTITLE
  264.  move.w #63,FADEAMOUNT
  265.  bsr FADEDOWNTITLE
  266.  
  267.  move.w #$0201,titleplanes
  268.  
  269.  bsr RELEASETITLEMEM
  270.   
  271.  jsr LOADBOTPIC
  272.   
  273.  clr.b FINISHEDLEVEL
  274.  
  275.  move.w #0,PLR1s_angpos
  276.  move.w #0,PLR2s_angpos
  277.  move.w #0,PLR1_angpos
  278.  move.w #0,PLR2_angpos
  279.  move.b #0,PLR1_GunSelected
  280.  move.b #0,PLR2_GunSelected
  281.  
  282. **************************8
  283.  clr.b NASTY
  284. *************************** 
  285.  jsr PLAYTHEGAME
  286.  
  287.  bsr FREEBOTMEM 
  288.  
  289. ; bra QUITTT
  290.  
  291.  tst.b FINISHEDLEVEL
  292.  beq dontusestats
  293.  bsr CALCPASSWORD
  294. dontusestats:
  295.  bsr PASSLINETOGAME
  296.  bsr GETSTATS
  297.  
  298.  bsr GETTITLEMEM
  299.  bsr CLROPTSCRN
  300.  bsr SETUPTITLESCRN
  301.  
  302.  bsr LOADTITLESCRN2
  303.  move.w #$7201,titleplanes
  304.  
  305.  move.w #$20,$dff1dc
  306.  move.l #titlecop,$dff080
  307.  move.w #$87c0,$dff000+dmacon
  308.  move.w #$8020,$dff000+dmacon 
  309.  
  310.  move.w #0,FADEVAL
  311.  move.w #63,FADEAMOUNT
  312.  bsr FADEUPTITLE
  313.  
  314.  move.w #31,FADEAMOUNT
  315.  bsr FADEDOWNTITLE 
  316.  
  317. ; IFEQ CD32VER
  318. ; jsr KInt_Init
  319. ; ENDC
  320.  
  321.  bra BACKTOMENU
  322.  
  323. QUITTT:
  324.  
  325.  move.l LEVELDATA,d1
  326.  move.l d1,a1
  327.  move.l #120000,d0
  328.  move.l 4.w,a6
  329.  jsr -210(a6)
  330.  
  331.  move.l TEXTSCRN,d1
  332.  move.l d1,a1
  333.  move.l #10240*2,d0
  334.  move.l 4.w,a6
  335.  jsr -210(a6)
  336.  
  337.  jsr RELEASEWALLMEM
  338.  jsr RELEASESAMPMEM
  339.  jsr RELEASEFLOORMEM
  340.  jsr RELEASEOBJMEM
  341.   
  342.  rte
  343.  
  344. SSTACK: dc.l 0
  345.  
  346. ; KEY OPTIONS:
  347. CONTROLBUFFER:
  348. turn_left_key:
  349.  dc.b $4f
  350. turn_right_key:
  351.  dc.b $4e
  352. forward_key:
  353.  dc.b $4c
  354. backward_key:
  355.  dc.b $4d
  356. fire_key:
  357.  dc.b $65
  358. operate_key:
  359.  dc.b $40
  360. run_key:
  361.  dc.b $61
  362. force_sidestep_key:
  363.  dc.b $67
  364. sidestep_left_key:
  365.  dc.b $39
  366. sidestep_right_key:
  367.  dc.b $3a
  368. duck_key:
  369.  dc.b $22
  370. look_behind_key:
  371.  dc.b $28
  372.  
  373. templeftkey: dc.b 0
  374. temprightkey: dc.b 0
  375. tempslkey: dc.b 0 
  376. tempsrkey: dc.b 0
  377.  
  378.  even 
  379.  
  380. GETSTATS:
  381. ; CHANGE PASSWORD INTO RAW DATA
  382.  
  383.  move.b PASSBUFFER,d0
  384.  and.w #$7f,d0
  385.  move.w d0,PLR1_energy
  386.  move.b PASSBUFFER+1,d0
  387.  btst #7,d0
  388.  sne PLR1_GunData+32+7
  389.  btst #6,d0
  390.  sne PLR1_GunData+32*2+7
  391.  btst #5,d0
  392.  sne PLR1_GunData+32*4+7
  393.  btst #4,d0
  394.  sne PLR1_GunData+32*7+7
  395.  and.w #%1111,d0
  396.  move.w d0,MAXLEVEL
  397.  move.b PASSBUFFER+2,d0
  398.  and.w #$7f,d0
  399.  lsl.w #3,d0
  400.  move.w d0,PLR1_GunData
  401.  move.b PASSBUFFER+3,d0
  402.  and.w #$7f,d0
  403.  lsl.w #3,d0
  404.  move.w d0,PLR1_GunData+32
  405.  move.b PASSBUFFER+4,d0
  406.  and.w #$7f,d0
  407.  lsl.w #3,d0
  408.  move.w d0,PLR1_GunData+32*2
  409.  move.b PASSBUFFER+5,d0
  410.  and.w #$7f,d0
  411.  lsl.w #3,d0
  412.  move.w d0,PLR1_GunData+32*4
  413.  move.b PASSBUFFER+6,d0
  414.  and.w #$7f,d0
  415.  lsl.w #3,d0
  416.  move.w d0,PLR1_GunData+32*7
  417.  rts
  418.  
  419.  
  420. SETPLAYERS:
  421.  
  422.  move.w PLOPT,d0
  423.  add.b #'a',d0
  424.  move.b d0,LEVA
  425.  move.b d0,LEVB
  426.  move.b d0,LEVC
  427.  
  428.  cmp.b #'s',mors
  429.  beq SLAVESETUP
  430.  cmp.b #'m',mors
  431.  beq MASTERSETUP
  432.  st NASTY
  433. onepla:
  434.  rts
  435.  
  436. NASTY: dc.w 0
  437.  
  438. MASTERSETUP:
  439.  bsr TWOPLAYER
  440.  clr.b NASTY
  441.  move.w PLOPT,d0
  442.  jsr SENDFIRST
  443.  rts
  444.  
  445. SLAVESETUP:
  446.  bsr TWOPLAYER
  447.  CLR.B NASTY
  448.  jsr RECFIRST
  449.  move.w d0,PLOPT
  450.  add.b #'a',d0
  451.  move.b d0,LEVA
  452.  move.b d0,LEVB
  453.  move.b d0,LEVC
  454.  rts
  455.      
  456. ********************************************************
  457.  
  458. ASKFORDISK:
  459.  lea RVAL1+300(pc),a0
  460.  lea RVAL2+900(pc),a1
  461.  PRSDD
  462.  move.w #3,OptScrn
  463.  bsr DRAWOPTSCRN
  464.  
  465. ProtChkNLev1:
  466. .wtrel:
  467.  btst #7,$bfe001
  468.  beq.s .wtrel
  469.  
  470. wtclick:
  471.  add.w #$235,-300(a0)
  472.  add.w #$4533,-900(a0)
  473.  btst #6,$bfe001
  474.  bne.s wtclick
  475.  
  476.  rts
  477.  
  478. CLRSPRITES: 
  479.  move.l #nullspr,d0
  480.  move.w d0,tsp0l
  481.  move.w d0,tsp1l
  482.  move.w d0,tsp2l
  483.  move.w d0,tsp3l
  484.  move.w d0,tsp4l
  485.  move.w d0,tsp5l
  486.  move.w d0,tsp6l
  487.  move.w d0,tsp7l
  488.  swap d0
  489.  move.w d0,tsp0h
  490.  move.w d0,tsp1h
  491.  move.w d0,tsp2h
  492.  move.w d0,tsp3h
  493.  move.w d0,tsp4h
  494.  move.w d0,tsp5h
  495.  move.w d0,tsp6h
  496.  move.w d0,tsp7h 
  497.  rts
  498.  
  499. ********************************************************
  500.  
  501. READMAINMENU:
  502.  
  503.  
  504.  move.b #'n',mors
  505.  
  506.  move.w MAXLEVEL,d0
  507.  
  508.  move.l #CURRENTLEVELLINE,a1
  509.  muls #40,d0
  510.  move.l #LEVEL_OPTS,a0
  511.  add.l d0,a0
  512.  bsr PUTINLINE
  513.  
  514.  
  515.  
  516. ; Stay here until 'play game' is selected.
  517.  
  518.  move.w #0,OptScrn
  519.  bsr DRAWOPTSCRN
  520.  move.w #1,OPTNUM
  521.  
  522.  bsr HIGHLIGHT
  523.  
  524.  
  525.  
  526.  bsr WAITREL
  527. .rdlop:
  528.  
  529.  bsr CHECKMENU
  530.  tst.w d0
  531.  blt.s .rdlop
  532.  
  533.  bne .noopt
  534.  
  535.  bra MASTERMENU
  536.  
  537. .noopt:
  538.  
  539.  cmp.w #1,d0
  540.  beq playgame
  541.  
  542.  cmp.w #2,d0
  543.  bne .nocontrol
  544.  
  545.  bsr CHANGECONTROLS
  546.  
  547.  move.w #0,OptScrn
  548.  bsr DRAWOPTSCRN
  549.  move.w #0,OPTNUM
  550.  
  551.  bsr HIGHLIGHT
  552.  
  553.  bsr WAITREL
  554.  bra .rdlop
  555.  
  556. .nocontrol:
  557.  
  558.  cmp.w #3,d0
  559.  bne .nocred
  560.  bsr SHOWCREDITS
  561.  move.w #0,OptScrn
  562.  bsr DRAWOPTSCRN
  563.  move.w #1,OPTNUM
  564.  
  565.  bsr HIGHLIGHT
  566.  
  567.  bsr WAITREL
  568.  bra .rdlop
  569.  
  570.  
  571. .nocred:
  572.  
  573.  cmp.w #4,d0
  574.  bne playgame
  575.  bsr WAITREL
  576.  
  577.  move.l #PASSWORDLINE+12,a0
  578.  moveq #15,d2
  579. .clrline:
  580.  move.b #32,(a0)+
  581.  dbra d2,.clrline 
  582.  move.w #0,OptScrn
  583.  bsr DRAWOPTSCRN
  584.  
  585.  IFEQ CD32VER
  586.  clr.b lastpressed
  587.  move.l #PASSWORDLINE+12,a0
  588.  move.w #0,d1
  589. .ENTERPASS:
  590.  tst.b lastpressed
  591.  beq .ENTERPASS
  592.  move.b lastpressed,d2
  593.  move.b #0,lastpressed
  594.  move.l #KVALTOASC,a1
  595.  
  596.  cmp.l #'<-- ',(a1,d2.w*4)
  597.  bne .nodel
  598.  
  599.  tst.b d1
  600.  beq .nodel
  601.  
  602.  subq #1,d1
  603.  move.b #32,-(a0)
  604.  movem.l d0-d7/a0-a6,-(a7)
  605.  bsr JUSTDRAWIT
  606.  movem.l (a7)+,d0-d7/a0-a6
  607.  bra .ENTERPASS
  608.  
  609. .nodel:
  610.  
  611.  cmp.l #'RTN ',(a1,d2.w*4)
  612.  beq .FORGETIT
  613.  cmp.l #'ESC ',(a1,d2.w*4)
  614.  beq .FORGETIT
  615.  move.b 1(a1,d2.w*4),d2
  616.  cmp.b #65,d2
  617.  blt .ENTERPASS
  618.  cmp.b #'Z',d2
  619.  bgt .ENTERPASS
  620.  move.b d2,(a0)+
  621.  move.w #0,OptScrn
  622.  movem.l d0-d7/a0-a6,-(a7)
  623.  bsr JUSTDRAWIT
  624.  movem.l (a7)+,d0-d7/a0-a6
  625.  add.w #1,d1
  626.  cmp.w #16,d1
  627.  blt .ENTERPASS
  628.  
  629.  ENDC
  630.  IFNE CD32VER
  631.  move.l #PASSWORDLINE+12,a0
  632.  move.w #15,d0
  633. .ENTERPASS:
  634.  bsr GETACHAR
  635.  dbra d0,.ENTERPASS
  636.  ENDC
  637.  
  638.  bsr PASSLINETOGAME
  639.  tst.w d0
  640.  bne .FORGETIT
  641.  
  642.  bsr GETSTATS
  643.  move.w MAXLEVEL,d0
  644.  move.l #CURRENTLEVELLINE,a1
  645.  muls #40,d0
  646.  move.l #LEVEL_OPTS,a0
  647.  add.l d0,a0
  648.  bsr PUTINLINE
  649.  
  650. .FORGETIT:
  651.  bsr WAITREL
  652.  bsr CALCPASSWORD
  653.  
  654.  move.w #0,OptScrn
  655.  bsr DRAWOPTSCRN
  656.  
  657.  move.w #1,OPTNUM
  658.  
  659.  bsr HIGHLIGHT
  660.  
  661.  bra .rdlop 
  662.  
  663. playgame:
  664.  
  665.  move.w MAXLEVEL,PLOPT
  666.  rts
  667.  
  668. LEVELSELECTED:
  669.  dc.w 0
  670.  
  671.  IFNE CD32VER
  672. GETACHAR:
  673.  moveq #0,d7
  674.  move.b #'A',(a0)
  675.  movem.l d0-d7/a0-a6,-(a7)
  676.  jsr JUSTDRAWIT
  677.  movem.l (a7)+,d0-d7/a0-a6
  678.  
  679. .wtnum:
  680.  btst #1,$dff00c
  681.  sne d1
  682.  btst #1,$dff00d
  683.  sne d2
  684.  btst #0,$dff00c
  685.  sne d3
  686.  btst #0,$dff00d
  687.  sne d4
  688.  
  689.  eor.b d1,d3
  690.  eor.b d2,d4
  691.  
  692.  tst.b d1
  693.  beq.s .NODELETE
  694.  cmp.w #15,d0
  695.  beq.s .NODELETE
  696.  move.b #32,(a0)
  697.  subq #1,a0
  698.  addq #1,d0
  699.  move.b (a0),d7
  700.  sub.b #'A',d7
  701.  movem.l d0-d7/a0-a6,-(a7)
  702.  jsr JUSTDRAWIT
  703.  movem.l (a7)+,d0-d7/a0-a6
  704.  jsr WAITFORNOPRESS
  705.  bra .wtnum
  706. .NODELETE
  707.  
  708.  tst.b d4
  709.  bne.s .PREVNUM
  710.  tst.b d3
  711.  bne.s .NEXTNUM
  712.  btst #7,$bfe001
  713.  bne.s .wtnum
  714.  addq #1,a0
  715.  jsr WAITFORNOPRESS
  716.  rts
  717.  
  718. .PREVNUM:
  719.  subq #1,d7
  720.  bge.s .nonegg
  721.  moveq #15,d7
  722. .nonegg:
  723.  move.b d7,d1
  724.  add.b #'A',d1
  725.  move.b d1,(a0)
  726.  movem.l d0-d7/a0-a6,-(a7)
  727.  jsr JUSTDRAWIT
  728.  movem.l (a7)+,d0-d7/a0-a6
  729.  
  730.  jsr WAITFORNOPRESS
  731.  
  732.  bra .wtnum
  733.  
  734. .NEXTNUM:
  735.  addq #1,d7
  736.  cmp.w #15,d7
  737.  ble.s .nobigg
  738.  moveq #0,d7
  739. .nobigg:
  740.  move.b d7,d1
  741.  add.b #'A',d1
  742.  move.b d1,(a0)
  743.  movem.l d0-d7/a0-a6,-(a7)
  744.  jsr JUSTDRAWIT
  745.  movem.l (a7)+,d0-d7/a0-a6
  746.  jsr WAITFORNOPRESS
  747.  bra .wtnum
  748.  rts
  749.  ENDC
  750.  
  751.  
  752. MASTERMENU:
  753.  
  754.  move.b #'m',mors
  755.  
  756.  move.w #0,LEVELSELECTED
  757.  
  758.  move.w #0,d0 
  759.  move.l #CURRENTLEVELLINEM,a1
  760.  muls #40,d0
  761.  move.l #LEVEL_OPTS,a0
  762.  add.l d0,a0
  763.  bsr PUTINLINE
  764.  
  765. ; Stay here until 'play game' is selected.
  766.  
  767.  move.w #4,OptScrn
  768.  bsr DRAWOPTSCRN
  769.  move.w #1,OPTNUM
  770.  
  771.  bsr HIGHLIGHT
  772.  
  773.  bsr WAITREL
  774. .rdlop:
  775.  bsr CHECKMENU
  776.  tst.w d0
  777.  blt.s .rdlop
  778.  bsr WAITREL
  779.  
  780.  cmp.w #1,d0
  781.  bne.s .nonextlev
  782.  
  783.  move.w LEVELSELECTED,d0
  784.  add.w #1,d0
  785.  cmp.w MAXLEVEL,d0
  786.  blt .nowrap
  787.  moveq #0,d0
  788. .nowrap:
  789.  move.w d0,LEVELSELECTED
  790.  move.l #CURRENTLEVELLINEM,a1
  791.  muls #40,d0
  792.  move.l #LEVEL_OPTS,a0
  793.  add.l d0,a0
  794.  bsr PUTINLINE
  795.  bsr JUSTDRAWIT
  796.  bra .rdlop
  797.  
  798. .nonextlev:
  799.  cmp.w #2,d0
  800.  beq .playgame
  801.  
  802.  cmp.w #0,d0
  803.  bne .noopt
  804.  
  805.  bra SLAVEMENU
  806.  
  807. .noopt:
  808.  
  809.  cmp.w #3,d0
  810.  bne .nocontrol
  811.  
  812.  bsr CHANGECONTROLS
  813.  
  814.  move.w #4,OptScrn
  815.  bsr DRAWOPTSCRN
  816.  move.w #0,OPTNUM
  817.  
  818.  bsr HIGHLIGHT
  819.  
  820.  bsr WAITREL
  821.  bra .rdlop
  822.  
  823. .nocontrol:
  824.  
  825. .playgame
  826.  
  827.  move.w LEVELSELECTED,PLOPT
  828.  rts
  829.  
  830. SLAVEMENU:
  831.  
  832.  move.b #'s',mors
  833.  
  834. ; Stay here until 'play game' is selected.
  835.  
  836.  move.w #5,OptScrn
  837.  bsr DRAWOPTSCRN
  838.  move.w #1,OPTNUM
  839.  
  840.  bsr HIGHLIGHT
  841.  
  842.  bsr WAITREL
  843. .rdlop:
  844.  bsr CHECKMENU
  845.  tst.w d0
  846.  blt.s .rdlop
  847.  bsr WAITREL
  848.  
  849.  cmp.w #1,d0
  850.  beq .playgame
  851.  
  852.  cmp.w #0,d0
  853.  bne .noopt
  854.  
  855.  bra READMAINMENU
  856.  
  857. .noopt:
  858.  
  859.  cmp.w #2,d0
  860.  bne .nocontrol
  861.  
  862.  bsr CHANGECONTROLS
  863.  
  864.  move.w #0,OptScrn
  865.  bsr DRAWOPTSCRN
  866.  move.w #0,OPTNUM
  867.  
  868.  bsr HIGHLIGHT
  869.  
  870.  bsr WAITREL
  871.  bra .rdlop
  872.  
  873. .nocontrol:
  874. .playgame:
  875.  
  876.  rts
  877.  
  878. TWOPLAYER:
  879.  move.w #0,OldEnergy
  880.  move.w #127,Energy
  881.  jsr EnergyBar
  882.  
  883.  move.w #63,OldAmmo
  884.  move.w #0,Ammo
  885.  jsr AmmoBar
  886.  move.w #0,OldAmmo
  887.  
  888.  move.w #127,PLR1_energy
  889.  move.w #127,PLR2_energy 
  890.  move.w #160,PLR1_GunData    ; 10 shots pistol
  891.  st PLR1_GunData+7
  892.  
  893.  st.b PLR1_GunData+32+7
  894.  move.w #80*4,PLR1_GunData+32
  895.  
  896.  st.b PLR1_GunData+64+7
  897.  move.w #80*4,PLR1_GunData+64
  898.  
  899.  st.b PLR1_GunData+32*3+7
  900.  move.w #80*4,PLR1_GunData+32*3
  901.  
  902.  st.b PLR1_GunData+32*4+7
  903.  move.w #80*4,PLR1_GunData+32*4
  904.  
  905.  st.b PLR1_GunData+32*7+7
  906.  move.w #80*4,PLR1_GunData+32*7
  907.  
  908.  move.b #0,PLR1_GunSelected
  909.  
  910.  move.w #160,PLR2_GunData    ; 10 shots pistol
  911.  st PLR2_GunData+7
  912.  st.b PLR2_GunData+32+7
  913.  move.w #80*4,PLR2_GunData+32
  914.  
  915.  st.b PLR2_GunData+64+7
  916.  move.w #80*4,PLR2_GunData+64
  917.  
  918.  st.b PLR2_GunData+32*3+7
  919.  move.w #80*4,PLR2_GunData+32*3
  920.  
  921.  st.b PLR2_GunData+32*4+7
  922.  move.w #80*4,PLR2_GunData+32*4
  923.  
  924.  st.b PLR2_GunData+32*7+7
  925.  move.w #80*4,PLR2_GunData+32*7
  926.  move.b #0,PLR2_GunSelected
  927.  rts
  928.  
  929. newdum:
  930.  rts
  931.  
  932. DEFAULTGAME:
  933.  move.w #0,MAXLEVEL
  934.  move.w #5,CHEATNUM
  935.  move.l #CHEATFRAME-200000,CHEATPTR
  936.  
  937.  move.w #0,OldEnergy
  938.  move.w #127,Energy
  939.  jsr EnergyBar
  940.  
  941.  move.w #63,OldAmmo
  942.  move.w #0,Ammo
  943.  jsr AmmoBar
  944.  move.w #0,OldAmmo
  945.  
  946.  move.w #127,PLR1_energy
  947.  move.w #127,PLR2_energy 
  948.  move.w #160,PLR1_GunData    ; 10 shots pistol
  949.  st PLR1_GunData+7
  950.  clr.b PLR1_GunData+32+7
  951.  clr.w PLR1_GunData+32
  952.  clr.b PLR1_GunData+64+7
  953.  clr.w PLR1_GunData+64
  954.  clr.b PLR1_GunData+32*3+7
  955.  clr.w PLR1_GunData+32*3
  956.  clr.b PLR1_GunData+32*4+7
  957.  clr.w PLR1_GunData+32*4
  958.  clr.b PLR1_GunData+32*7+7
  959.  clr.w PLR1_GunData+32*7
  960.  move.b #0,PLR1_GunSelected
  961.  
  962. ProtChkILev1:
  963.  move.l #RealTable-2000,a3
  964.  move.l #PROTCALC-5000,a1
  965.  move.l #ASKFORPROT-10000,a2
  966.  move.l #PROTCALLENC-800,a4
  967.  adda.w #800,a4
  968.  jsr (a4)
  969.  
  970. ************************************************
  971. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  972. ************************************************
  973.  
  974. ProtChkLLev1:
  975.  tst.w protA
  976.  bne.s .noreset
  977.  move.l #0,a7
  978. .noreset:
  979.  
  980. ************************************************
  981.  
  982.  move.w #160,PLR2_GunData    ; 10 shots pistol
  983.  st PLR2_GunData+7
  984.  clr.b PLR2_GunData+32+7
  985.  clr.w PLR2_GunData+32
  986.  clr.b PLR2_GunData+64+7
  987.  clr.w PLR2_GunData+64
  988.  clr.b PLR2_GunData+32*3+7
  989.  clr.w PLR2_GunData+32*3
  990.  clr.b PLR2_GunData+32*4+7
  991.  clr.w PLR2_GunData+32*4
  992.  clr.b PLR2_GunData+32*7+7
  993.  clr.w PLR2_GunData+32*7
  994.  move.b #0,PLR2_GunSelected
  995.  
  996.  bsr CALCPASSWORD
  997.  
  998.  rts
  999.  
  1000. CHKPROT: dc.w 0
  1001.  
  1002. GETPARITY:
  1003.  move.w #6,d3
  1004. .calcparity:
  1005.  btst d3,d0
  1006.  beq.s .nochange
  1007.  bchg #7,d0
  1008. .nochange:
  1009.  dbra d3,.calcparity
  1010.  rts
  1011.  
  1012. CHECKPARITY:
  1013.  move.w #6,d3
  1014.  move.b #$0,d2
  1015. .calcparity:
  1016.  btst d3,d0
  1017.  beq.s .nochange
  1018.  bchg #7,d2
  1019. .nochange:
  1020.  dbra d3,.calcparity
  1021.  move.b d0,d1
  1022.  and.b #$80,d1
  1023.  eor.b d1,d2
  1024.  sne.s d5
  1025.  rts
  1026.  
  1027. CALCPASSWORD:
  1028.  move.b PLR1_energy+1,d0
  1029.  bsr GETPARITY
  1030.  move.b d0,PASSBUFFER
  1031.  moveq #0,d0
  1032.  tst.b PLR1_GunData+32+7
  1033.  sne d0
  1034.  lsl.w #1,d0
  1035.  tst.b PLR1_GunData+64+7
  1036.  sne d0
  1037.  lsl.w #1,d0
  1038.  tst.b PLR1_GunData+32*4+7
  1039.  sne d0
  1040.  lsl.w #1,d0
  1041.  tst.b PLR1_GunData+32*7+7
  1042.  sne d0
  1043.  lsr.w #3,d0
  1044.  and.b #%11110000,d0
  1045.  or.b MAXLEVEL+1,d0
  1046.  move.b d0,PASSBUFFER+1
  1047.  eor.b #%10110101,d0
  1048.  neg.b d0
  1049.  add.b #50,d0
  1050.  move.b d0,PASSBUFFER+7
  1051.  
  1052.  move.w PLR1_GunData,d0
  1053.  lsr.w #3,d0
  1054.  bsr GETPARITY
  1055.  move.b d0,PASSBUFFER+2
  1056.  move.w PLR1_GunData+32,d0
  1057.  lsr.w #3,d0
  1058.  bsr GETPARITY
  1059.  move.b d0,PASSBUFFER+3
  1060.  move.w PLR1_GunData+32*2,d0
  1061.  lsr.w #3,d0
  1062.  bsr GETPARITY
  1063.  move.b d0,PASSBUFFER+4
  1064.  move.w PLR1_GunData+32*4,d0
  1065.  lsr.w #3,d0
  1066.  bsr GETPARITY
  1067.  move.b d0,PASSBUFFER+5
  1068.  move.w PLR1_GunData+32*7,d0
  1069.  lsr.w #3,d0
  1070.  bsr GETPARITY
  1071.  move.b d0,PASSBUFFER+6
  1072.  
  1073.  move.w #3,d0
  1074.  move.l #PASSBUFFER,a0
  1075.  move.l #PASSBUFFER+8,a1
  1076.  move.l #PASS,a2
  1077.  moveq #0,d4
  1078. mixemup:
  1079.  move.b (a0)+,d1
  1080.  move.b -(a1),d2
  1081.  not.b d2
  1082.  moveq #0,d3
  1083.  lsr.b #1,d1
  1084.  addx.w d3,d3
  1085.  lsr.b #1,d2
  1086.  addx.w d3,d3
  1087.  lsr.b #1,d1
  1088.  addx.w d3,d3
  1089.  lsr.b #1,d2
  1090.  addx.w d3,d3
  1091.  lsr.b #1,d1
  1092.  addx.w d3,d3
  1093.  lsr.b #1,d2
  1094.  addx.w d3,d3
  1095.  lsr.b #1,d1
  1096.  addx.w d3,d3
  1097.  lsr.b #1,d2
  1098.  addx.w d3,d3
  1099.  lsr.b #1,d1
  1100.  addx.w d3,d3
  1101.  lsr.b #1,d2
  1102.  addx.w d3,d3
  1103.  lsr.b #1,d1
  1104.  addx.w d3,d3
  1105.  lsr.b #1,d2
  1106.  addx.w d3,d3
  1107.  lsr.b #1,d1
  1108.  addx.w d3,d3
  1109.  lsr.b #1,d2
  1110.  addx.w d3,d3
  1111.  lsr.b #1,d1
  1112.  addx.w d3,d3
  1113.  lsr.b #1,d2
  1114.  addx.w d3,d3
  1115.  move.w d3,(a2)+
  1116.  
  1117.  dbra d0,mixemup
  1118.  
  1119.  move.l #PASSWORDLINE+12,a0
  1120.  move.l #PASS,a1
  1121.  move.w #7,d0
  1122. putinpassline:
  1123.  move.b (a1),d1
  1124.  and.b #%1111,d1
  1125.  add.b #65,d1
  1126.  move.b d1,(a0)+
  1127.  move.b (a1)+,d1
  1128.  lsr.b #4,d1
  1129.  and.b #%1111,d1
  1130.  add.b #65,d1
  1131.  move.b d1,(a0)+
  1132.  dbra d0,putinpassline
  1133.  rts
  1134.  
  1135. PASSLINETOGAME:
  1136.  move.l #PASSWORDLINE+12,a0
  1137.  move.l #PASS,a1
  1138.  move.w #7,d0
  1139. getbuff:
  1140.  move.b (a0)+,d1
  1141.  move.b (a0)+,d2
  1142.  sub.b #65,d1
  1143.  sub.b #65,d2
  1144.  and.b #%1111,d1
  1145.  and.b #%1111,d2
  1146.  lsl.b #4,d2
  1147.  or.b d2,d1
  1148.  move.b d1,(a1)+
  1149.  dbra d0,getbuff
  1150.  
  1151.  move.l #PASS,a0
  1152.  move.l #PASSBUFFER,a1
  1153.  move.l #PASSBUFFER+8,a2
  1154.  move.w #3,d0
  1155.  moveq #0,d4
  1156. unmix:
  1157.  move.w (a0)+,d1
  1158.  moveq #0,d2
  1159.  moveq #0,d3
  1160.  lsr.w #1,d1
  1161.  addx.w d3,d3
  1162.  lsr.w #1,d1
  1163.  addx.w d2,d2
  1164.  lsr.w #1,d1
  1165.  addx.w d3,d3
  1166.  lsr.w #1,d1
  1167.  addx.w d2,d2
  1168.  lsr.w #1,d1
  1169.  addx.w d3,d3
  1170.  lsr.w #1,d1
  1171.  addx.w d2,d2
  1172.  lsr.w #1,d1
  1173.  addx.w d3,d3
  1174.  lsr.w #1,d1
  1175.  addx.w d2,d2
  1176.  lsr.w #1,d1
  1177.  addx.w d3,d3
  1178.  lsr.w #1,d1
  1179.  addx.w d2,d2
  1180.  lsr.w #1,d1
  1181.  addx.w d3,d3
  1182.  lsr.w #1,d1
  1183.  addx.w d2,d2
  1184.  lsr.w #1,d1
  1185.  addx.w d3,d3
  1186.  lsr.w #1,d1
  1187.  addx.w d2,d2
  1188.  lsr.w #1,d1
  1189.  addx.w d3,d3
  1190.  lsr.w #1,d1
  1191.  addx.w d2,d2
  1192.  not.b d3
  1193.  move.b d3,-(a2)
  1194.  move.b d2,(a1)+
  1195.  dbra d0,unmix
  1196.  
  1197.  move.b PASSBUFFER,d0
  1198.  bsr CHECKPARITY
  1199.  tst.b d5
  1200.  bne illega
  1201.  move.b PASSBUFFER+2,d0
  1202.  bsr CHECKPARITY
  1203.  tst.b d5
  1204.  bne illega
  1205.  move.b PASSBUFFER+3,d0
  1206.  bsr CHECKPARITY
  1207.  tst.b d5
  1208.  bne illega
  1209.  move.b PASSBUFFER+4,d0
  1210.  bsr CHECKPARITY
  1211.  tst.b d5
  1212.  bne illega
  1213.  move.b PASSBUFFER+5,d0
  1214.  bsr CHECKPARITY
  1215.  tst.b d5
  1216.  bne illega
  1217.  move.b PASSBUFFER+6,d0
  1218.  bsr CHECKPARITY
  1219.  tst.b d5
  1220.  bne illega
  1221.  
  1222.  move.b PASSBUFFER+1,d0
  1223.  eor.b #%10110101,d0
  1224.  neg.b d0
  1225.  add.b #50,d0
  1226.  cmp.b PASSBUFFER+7,d0
  1227.  bne illega
  1228.  
  1229.  move.w #0,d0
  1230.  rts
  1231.  
  1232. illega:
  1233.  
  1234.  move.w #-1,d0
  1235.  
  1236.  rts
  1237.  
  1238. PASSBUFFER:
  1239.  ds.b 8
  1240.  
  1241. CHECKBUFFER: ds.b 8
  1242.  
  1243. PASS:
  1244.  ds.b 16
  1245.  
  1246. **************************************************
  1247.  
  1248. CHANGECONTROLS:
  1249.  
  1250.  move.w #6,OptScrn
  1251.  bsr DRAWOPTSCRN
  1252.  move.w #0,OPTNUM
  1253.  bsr HIGHLIGHT
  1254.  bsr WAITREL
  1255.  
  1256. .rdlop:
  1257.  bsr CHECKMENU
  1258.  tst.w d0
  1259.  blt.s .rdlop
  1260.  
  1261.  cmp.w #12,d0
  1262.  beq .backtomain
  1263.  
  1264.  move.l #KEY_LINES,a0
  1265.  move.w d0,d1
  1266.  muls #40,d1
  1267.  add.l d1,a0
  1268.  add.w #32,a0
  1269.  move.l #$20202020,(a0)
  1270.  movem.l d0/a0,-(a7)
  1271.  bsr JUSTDRAWIT
  1272.  movem.l (a7)+,d0/a0 
  1273.  
  1274.  clr.b lastpressed
  1275.  
  1276. .wtkey
  1277.  tst.b lastpressed
  1278.  beq .wtkey
  1279.  
  1280.  move.l #CONTROLBUFFER,a1
  1281.  moveq #0,d1
  1282.  move.b lastpressed,d1
  1283.  move.b d1,(a1,d0.w)
  1284.  move.l #KVALTOASC,a1
  1285.  move.l (a1,d1.w*4),(a0)
  1286.  bsr JUSTDRAWIT
  1287.  bsr WAITREL
  1288.  bra .rdlop
  1289.  
  1290. .backtomain:
  1291.  rts
  1292.  
  1293. **************************************************
  1294.  
  1295.  
  1296. MAXLEVEL: dc.w 0
  1297.  
  1298. SHOWCREDITS:
  1299.  move.w #2,OptScrn
  1300.  bsr DRAWOPTSCRN
  1301.  move.w #0,OPTNUM
  1302.  bsr HIGHLIGHT
  1303.  
  1304.  bsr WAITREL
  1305.  
  1306. .rdlop:
  1307.  bsr CHECKMENU
  1308.  tst.w d0
  1309.  blt.s .rdlop
  1310.  
  1311.  bra READMAINMENU
  1312.  
  1313. HELDDOWN:
  1314.  dc.w 0
  1315.  
  1316. WAITREL:
  1317.  
  1318.  movem.l d0/d1/d2/d3,-(a7)
  1319.  
  1320.  move.l #KeyMap,a5
  1321. WAITREL2:
  1322.  btst #7,$bfe001
  1323.  beq.s WAITREL2
  1324.  
  1325.  IFEQ CD32VER
  1326.  tst.b $40(a5)
  1327.  bne.s WAITREL2
  1328.  tst.b $44(a5)
  1329.  bne.s WAITREL2
  1330.  tst.b $4c(a5)
  1331.  bne.s WAITREL2
  1332.  tst.b $4d(a5)
  1333.  bne.s WAITREL2
  1334.  ENDC
  1335.  
  1336.  btst #1,$dff00c
  1337.  sne d0
  1338.  btst #1,$dff00d
  1339.  sne d1
  1340.  btst #0,$dff00c
  1341.  sne d2
  1342.  btst #0,$dff00d
  1343.  sne d3
  1344.  
  1345.  eor.b d0,d2
  1346.  eor.b d1,d3
  1347.  tst.b d2
  1348.  bne.s WAITREL2
  1349.  tst.b d3
  1350.  bne.s WAITREL2
  1351.  
  1352.  
  1353.  movem.l (a7)+,d0/d1/d2/d3
  1354.  rts
  1355.  
  1356. PUTINLINE:
  1357.  moveq #39,d0
  1358. pill
  1359.  move.b (a0)+,(a1)+
  1360.  dbra d0,pill
  1361.  rts
  1362.  
  1363. CHECKMENU:
  1364.  btst #1,$dff00c
  1365.  sne d0
  1366.  btst #1,$dff00d
  1367.  sne d1
  1368.  btst #0,$dff00c
  1369.  sne d2
  1370.  btst #0,$dff00d
  1371.  sne d3
  1372.  
  1373.  eor.b d0,d2
  1374.  eor.b d1,d3
  1375.  
  1376.  move.l #KeyMap,a5
  1377.  move.b $4c(a5),d0
  1378.  move.b $4d(a5),d1
  1379.  or.b d1,d3
  1380.  or.b d0,d2
  1381.  
  1382.  move.w OptScrn,d0
  1383.  move.l #MENUDATA,a0
  1384.  move.l 4(a0,d0.w*8),a0    ; opt data
  1385.  
  1386.  move.w OPTNUM,d0
  1387.  
  1388.  tst.b d2
  1389.  beq.s NOPREV
  1390.  
  1391.  
  1392.  sub.w #1,d0
  1393.  bge.s NOPREV
  1394.  
  1395.  move.w #0,d0 
  1396.  
  1397. NOPREV:
  1398.  
  1399.  tst.b d3
  1400.  beq.s NONEXT
  1401.  
  1402.  bsr WAITREL
  1403.  
  1404.  add.w #1,d0
  1405.  tst.w (a0,d0.w*8)
  1406.  bge.s NONEXT
  1407.  
  1408.  subq #1,d0
  1409.  
  1410. NONEXT:
  1411.  
  1412.  cmp.w OPTNUM,d0
  1413.  beq.s .nochange
  1414.  
  1415.  bsr HIGHLIGHT
  1416.  move.w d0,OPTNUM
  1417.  bsr HIGHLIGHT
  1418.  bsr WAITREL
  1419.  
  1420. .nochange:
  1421.  
  1422.  move.w #-1,d0
  1423.  
  1424.  btst #7,$bfe001
  1425.  beq.s select
  1426.  move.b $40(a5),d1
  1427.  or.b $44(a5),d1
  1428.  tst.b d1
  1429.  beq.s noselect
  1430.  
  1431. select:
  1432.  bsr WAITREL
  1433.  move.w OPTNUM,d0
  1434. noselect:
  1435.  
  1436.  rts
  1437.  
  1438. HIGHLIGHT:
  1439.  
  1440.  SAVEREGS
  1441.  
  1442.  move.w OptScrn,d0
  1443.  move.l #MENUDATA,a0
  1444.  move.l 4(a0,d0.w*8),a0
  1445.  move.w OPTNUM,d0
  1446.  lea (a0,d0.w*8),a0
  1447.  move.w (a0)+,d0    ;left
  1448.  move.w (a0)+,d1    ;top
  1449.  move.w (a0)+,d2    ;width
  1450.  
  1451.  muls #16*8,d1
  1452.  move.l OPTSPRADDR,a1
  1453.  add.w d1,a1
  1454.  add.w #8+16,a1
  1455.  move.l #SCRTOSPR2,a5
  1456.  adda.w d0,a5
  1457.  adda.w d0,a5
  1458.  
  1459. NOTLOP:
  1460.  
  1461.  move.w (a5)+,d3
  1462.  lea (a1,d3.w),a2
  1463.  not.b (a2)
  1464.  not.b 16(a2)
  1465.  not.b 32(a2)
  1466.  not.b 48(a2)
  1467.  not.b 64(a2)
  1468.  not.b 80(a2)
  1469.  not.b 96(a2)
  1470.  not.b 112(a2)
  1471.  not.b 128(a2)
  1472.  subq #1,d2
  1473.  bgt.s NOTLOP
  1474.  
  1475.  GETREGS
  1476.  rts
  1477.  
  1478. SCRTOSPR2:
  1479. val SET 0
  1480.  REPT 6
  1481.  dc.w val+0
  1482.  dc.w val+1
  1483.  dc.w val+2
  1484.  dc.w val+3
  1485.  dc.w val+4
  1486.  dc.w val+5
  1487.  dc.w val+6
  1488.  dc.w val+7
  1489. val SET val+258*16
  1490.  ENDR
  1491.  
  1492. CLROPTSCRN:
  1493.  
  1494.  move.l #$2cdfea,d0
  1495.  move.w (a4,d0.l),d0
  1496.  add.w d0,RVAL2
  1497.  
  1498.  move.l OPTSPRADDR,a0
  1499.  lea 16(a0),a1
  1500.  lea 16+(258*16)(a0),a2
  1501.  lea 16+(258*16*2)(a0),a3
  1502.  lea 16+(258*16*3)(a0),a4
  1503.  lea 258*16(a4),a0
  1504.  
  1505.  move.w #256,d0
  1506.  moveq #0,d1
  1507. CLRLOP:
  1508.  move.l d1,(a0)+
  1509.  move.l d1,(a0)+
  1510.  move.l d1,(a0)+
  1511.  move.l d1,(a0)+
  1512.  move.l d1,(a1)+
  1513.  move.l d1,(a1)+
  1514.  move.l d1,(a1)+
  1515.  move.l d1,(a1)+
  1516.  move.l d1,(a2)+
  1517.  move.l d1,(a2)+
  1518.  move.l d1,(a2)+
  1519.  move.l d1,(a2)+
  1520.  move.l d1,(a3)+
  1521.  move.l d1,(a3)+
  1522.  move.l d1,(a3)+
  1523.  move.l d1,(a3)+
  1524.  move.l d1,(a4)+
  1525.  move.l d1,(a4)+
  1526.  move.l d1,(a4)+
  1527.  move.l d1,(a4)+
  1528.  dbra d0,CLRLOP
  1529.  
  1530.  move.l OPTSPRADDR,a0
  1531.  move.w #44*256+64,(a0)
  1532.  move.w #44*256+2,8(a0)
  1533.  add.l #258*16,a0
  1534.  
  1535.  move.w #44*256+96,(a0)
  1536.  move.w #44*256+2,8(a0)
  1537.  add.l #258*16,a0
  1538.  
  1539.  move.w #44*256+128,(a0)
  1540.  move.w #44*256+2,8(a0)
  1541.  add.l #258*16,a0
  1542.  
  1543.  move.w #44*256+160,(a0)
  1544.  move.w #44*256+2,8(a0)
  1545.  add.l #258*16,a0
  1546.  
  1547.  move.w #44*256+192,(a0)
  1548.  move.w #44*256+2,8(a0)
  1549.  
  1550.  rts
  1551.  
  1552. DRAWOPTSCRN:
  1553.  
  1554.  bsr CLROPTSCRN
  1555.  
  1556. JUSTDRAWIT:
  1557.  
  1558.  move.l #font,a0
  1559.  move.l #MENUDATA,a1
  1560.  move.w OptScrn,d0
  1561.  move.l (a1,d0.w*8),a1
  1562.  
  1563.  move.l OPTSPRADDR,a3
  1564.  add.l #16,a3
  1565.  moveq #0,d2
  1566.  
  1567.  move.w #31,d0
  1568. linelop:
  1569.  move.w #39,d1
  1570.  move.l #SCRTOSPR,a4
  1571.  move.l a3,a2
  1572. charlop:
  1573.  move.b (a1)+,d2
  1574.  lea (a0,d2.w*8),a5
  1575.  move.b (a5)+,(a2)
  1576.  move.b (a5)+,16(a2)
  1577.  move.b (a5)+,32(a2)
  1578.  move.b (a5)+,48(a2)
  1579.  move.b (a5)+,64(a2)
  1580.  move.b (a5)+,80(a2)
  1581.  move.b (a5)+,96(a2)
  1582.  move.b (a5),112(a2)
  1583.  add.w (a4)+,a2
  1584.  dbra d1,charlop
  1585.  add.w #16*8,a3
  1586.  dbra d0,linelop
  1587.  
  1588.  rts
  1589.   
  1590. SCRTOSPR:
  1591.  dc.w 1,1,1,1,1,1,1,258*16-7
  1592.  dc.w 1,1,1,1,1,1,1,258*16-7
  1593.  dc.w 1,1,1,1,1,1,1,258*16-7
  1594.  dc.w 1,1,1,1,1,1,1,258*16-7
  1595.  dc.w 1,1,1,1,1,1,1,258*16-7
  1596.  dc.w 1,1,1,1,1,1,1,258*16-7
  1597.   
  1598. OPTNUM: dc.w 0
  1599. OptScrn: dc.w 0
  1600.  
  1601. MENUDATA:
  1602. ;0
  1603.  dc.l ONEPLAYERMENU_TXT
  1604.  dc.l ONEPLAYERMENU_OPTS
  1605. ;1
  1606.  dc.l INSTRUCTIONS_TXT
  1607.  dc.l INSTRUCTIONS_OPTS
  1608. ;2
  1609.  dc.l CREDITMENU_TXT
  1610.  dc.l CREDITMENU_OPTS
  1611. ;3
  1612.  dc.l ASKFORDISK_TXT
  1613.  dc.l ASKFORDISK_OPTS
  1614. ;4
  1615. ; dc.l ONEPLAYERMENU_TXT
  1616. ; dc.l ONEPLAYERMENU_OPTS
  1617.  dc.l MASTERPLAYERMENU_TXT
  1618.  dc.l MASTERPLAYERMENU_OPTS
  1619. ;5
  1620.  dc.l SLAVEPLAYERMENU_TXT
  1621.  dc.l SLAVEPLAYERMENU_OPTS
  1622. ;6
  1623.  dc.l CONTROL_TXT
  1624.  dc.l CONTROL_OPTS
  1625. ;7
  1626.  dc.l PROTMENU_TXT
  1627.  dc.l CONTROL_OPTS
  1628.  
  1629. ASKFORDISK_TXT:
  1630. ;      0123456789012345678901234567890123456789
  1631.  dc.b '                                        ' ;0
  1632.  dc.b '                                        ' ;1
  1633.  dc.b '                                        ' ;2
  1634.  dc.b '                                        ' ;3
  1635.  dc.b '                                        ' ;4
  1636.  dc.b '                                        ' ;5
  1637.  dc.b '                                        ' ;6
  1638.  dc.b '                                        ' ;7
  1639.  dc.b '                                        ' ;8
  1640.  dc.b '                                        ' ;9
  1641.  dc.b '                                        ' ;0
  1642.  dc.b '                                        ' ;1
  1643.  dc.b '                                        ' ;2
  1644.  dc.b '          INSERT LEVEL DISK             ' ;3
  1645.  dc.b '                                        ' ;4
  1646.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1647.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1648.  dc.b '               FINISHES                 ' ;7
  1649.  dc.b '                                        ' ;8
  1650.  dc.b '                                        ' ;9
  1651.  dc.b '                                        ' ;0
  1652.  dc.b '                                        ' ;1
  1653.  dc.b '                                        ' ;2
  1654.  dc.b '                                        ' ;3
  1655.  dc.b '                                        ' ;4
  1656.  dc.b '                                        ' ;5
  1657.  dc.b '                                        ' ;6
  1658.  dc.b '                                        ' ;7
  1659.  dc.b '                                        ' ;8
  1660.  dc.b '                                        ' ;9
  1661.  dc.b '                                        ' ;0
  1662.  dc.b '                                        ' ;1
  1663.  
  1664. ASKFORDISK_OPTS:
  1665.  dc.w -1
  1666.  
  1667.  
  1668. ONEPLAYERMENU_TXT:
  1669. ;      0123456789012345678901234567890123456789
  1670.  dc.b '                                        ' ;0
  1671.  dc.b '                                        ' ;1
  1672.  dc.b '                                        ' ;2
  1673.  dc.b '                                        ' ;3
  1674.  dc.b '                                        ' ;4
  1675.  dc.b '                                        ' ;5
  1676.  dc.b '                                        ' ;6
  1677.  dc.b '                                        ' ;7
  1678.  dc.b '                                        ' ;8
  1679.  dc.b '                                        ' ;9
  1680.  dc.b '                                        ' ;0
  1681. CURRENTLEVELLINE:
  1682.  dc.b '           LEVEL 1 : THE GATE           ' ;1 
  1683.  dc.b '                                        ' ;2
  1684.  dc.b '                1 PLAYER                ' ;3
  1685.  dc.b '                                        ' ;4
  1686.  dc.b '               PLAY  GAME               ' ;5
  1687.  dc.b '                                        ' ;6
  1688.  dc.b '            CONTROL  OPTIONS            ' ;7
  1689.  dc.b '                                        ' ;8
  1690.  dc.b '              GAME CREDITS              ' ;9
  1691.  dc.b '                                        ' ;0
  1692.  dc.b '                PASSWORD                ' ;1
  1693.  dc.b '                                        ' ;2
  1694. PASSWORDLINE:
  1695.  dc.b '                                        ' ;3
  1696.  dc.b '                                        ' ;4
  1697.  dc.b '                                        ' ;5
  1698.  dc.b '                                        ' ;6
  1699.  dc.b '                                        ' ;7
  1700.  dc.b '                                        ' ;8
  1701.  dc.b '                                        ' ;9
  1702.  dc.b '                                        ' ;0
  1703.  dc.b '                                        ' ;1
  1704.  
  1705. ONEPLAYERMENU_OPTS:
  1706.  dc.w 16,13,8,1
  1707.  dc.w 15,15,10,1
  1708.  dc.w 12,17,16,1
  1709.  dc.w 14,19,12,1
  1710.  dc.w 12,23,16,1
  1711.  dc.w -1
  1712.  
  1713.  
  1714. MASTERPLAYERMENU_TXT:
  1715. ;      0123456789012345678901234567890123456789
  1716.  dc.b '                                        ' ;0
  1717.  dc.b '                                        ' ;1
  1718.  dc.b '                                        ' ;2
  1719.  dc.b '                                        ' ;3
  1720.  dc.b '                                        ' ;4
  1721.  dc.b '                                        ' ;5
  1722.  dc.b '                                        ' ;6
  1723.  dc.b '                                        ' ;7
  1724.  dc.b '                                        ' ;8
  1725.  dc.b '                                        ' ;9
  1726.  dc.b '                                        ' ;0
  1727.  dc.b '                                        ' ;1
  1728.  dc.b '            2 PLAYER  MASTER            ' ;2
  1729.  dc.b '                                        ' ;3
  1730. CURRENTLEVELLINEM:
  1731.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1732.  dc.b '                                        ' ;5
  1733.  dc.b '               PLAY  GAME               ' ;6
  1734.  dc.b '                                        ' ;7
  1735.  dc.b '            CONTROL  OPTIONS            ' ;8
  1736.  dc.b '                                        ' ;9
  1737.  dc.b '                                        ' ;0
  1738.  dc.b '                                        ' ;1
  1739.  dc.b '                                        ' ;2
  1740.  dc.b '                                        ' ;3
  1741.  dc.b '                                        ' ;4
  1742.  dc.b '                                        ' ;5
  1743.  dc.b '                                        ' ;6
  1744.  dc.b '                                        ' ;7
  1745.  dc.b '                                        ' ;8
  1746.  dc.b '                                        ' ;9
  1747.  dc.b '                                        ' ;0
  1748.  dc.b '                                        ' ;1
  1749.  
  1750. MASTERPLAYERMENU_OPTS:
  1751.  dc.w 12,12,16,1
  1752.  dc.w 6,14,28,1
  1753.  dc.w 15,16,10,1
  1754.  dc.w 12,18,16,1
  1755.  dc.w -1
  1756.  
  1757. SLAVEPLAYERMENU_TXT:
  1758. ;      0123456789012345678901234567890123456789
  1759.  dc.b '                                        ' ;0
  1760.  dc.b '                                        ' ;1
  1761.  dc.b '                                        ' ;2
  1762.  dc.b '                                        ' ;3
  1763.  dc.b '                                        ' ;4
  1764.  dc.b '                                        ' ;5
  1765.  dc.b '                                        ' ;6
  1766.  dc.b '                                        ' ;7
  1767.  dc.b '                                        ' ;8
  1768.  dc.b '                                        ' ;9
  1769.  dc.b '                                        ' ;9
  1770.  dc.b '                                        ' ;1
  1771.  dc.b '             2 PLAYER SLAVE             ' ;4
  1772.  dc.b '                                        ' ;3
  1773.  dc.b '               PLAY  GAME               ' ;2
  1774.  dc.b '                                        ' ;5
  1775.  dc.b '            CONTROL  OPTIONS            ' ;0
  1776.  dc.b '                                        ' ;1
  1777.  dc.b '                                        ' ;3
  1778.  dc.b '                                        ' ;7
  1779.  dc.b '                                        ' ;7
  1780.  dc.b '                                        ' ;3
  1781.  dc.b '                                        ' ;3
  1782.  dc.b '                                        ' ;3
  1783.  dc.b '                                        ' ;4
  1784.  dc.b '                                        ' ;5
  1785.  dc.b '                                        ' ;6
  1786.  dc.b '                                        ' ;7
  1787.  dc.b '                                        ' ;9
  1788.  dc.b '                                        ' ;9
  1789.  dc.b '                                        ' ;9
  1790.  dc.b '                                        ' ;9
  1791.  
  1792.  
  1793. PROTMENU_TXT:
  1794. ;      0123456789012345678901234567890123456789
  1795.  dc.b '                                        ' ;0
  1796.  dc.b '                                        ' ;1
  1797.  dc.b '                                        ' ;2
  1798.  dc.b '                                        ' ;3
  1799.  dc.b '                                        ' ;4
  1800.  dc.b '                                        ' ;5
  1801.  dc.b '                                        ' ;6
  1802.  dc.b '                                        ' ;7
  1803.  dc.b '                                        ' ;8
  1804.  dc.b '                                        ' ;9
  1805.  dc.b '                                        ' ;0
  1806.  dc.b '                                        ' ;1
  1807.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1808.  dc.b '                                        ' ;3
  1809. PROTLINE:
  1810.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1811.  dc.b '                                        ' ;5
  1812.  dc.b '                                        ' ;6
  1813.  dc.b '                                        ' ;7
  1814.  dc.b '                                        ' ;8
  1815.  dc.b '                                        ' ;9
  1816.  dc.b '                                        ' ;0
  1817.  dc.b '                                        ' ;1
  1818.  dc.b '                                        ' ;2
  1819.  dc.b '                                        ' ;3
  1820.  dc.b '                                        ' ;4
  1821.  dc.b '                                        ' ;5
  1822.  dc.b '                                        ' ;6
  1823.  dc.b '                                        ' ;7
  1824.  dc.b '                                        ' ;9
  1825.  dc.b '                                        ' ;0
  1826.  dc.b '                                        ' ;1
  1827.  
  1828.  
  1829.  
  1830. SLAVEPLAYERMENU_OPTS:
  1831.  dc.w 12,12,16,1
  1832.  dc.w 15,14,10,1
  1833.  dc.w 12,16,16,1
  1834.  dc.w -1
  1835.  
  1836.  
  1837. PLAYER_OPTS:
  1838. ;      0123456789012345678901234567890123456789
  1839.  dc.b '                 1 PLAYER               '
  1840.  dc.b '             2  PLAYER MASTER           '
  1841.  dc.b '              2 PLAYER SLAVE            '
  1842.  
  1843. LEVEL_OPTS:
  1844. ;      0123456789012345678901234567890123456789
  1845.  dc.b '      LEVEL  1 :          THE GATE      '
  1846.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1847.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1848.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  1849.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1850.  dc.b '      LEVEL  6 :         THE MINES      '
  1851.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1852.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1853.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1854.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1855.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1856.  dc.b '      LEVEL 12 :           THE PIT      '
  1857.  dc.b '      LEVEL 13 :            STRATA      '
  1858.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1859.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  1860.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1861.  
  1862. CONTROL_TXT:
  1863. ;      0123456789012345678901234567890123456789
  1864.  dc.b '                                        ' ;0
  1865.  dc.b '                                        ' ;1
  1866.  dc.b '                                        ' ;2
  1867.  dc.b '                                        ' ;3
  1868.  dc.b '            DEFINE  CONTROLS            ' ;4
  1869.  dc.b '                                        ' ;5
  1870. KEY_LINES:
  1871.  dc.b '     TURN LEFT                  LCK     ' ;6
  1872.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1873.  dc.b '     FORWARDS                   UCK     ' ;8
  1874.  dc.b '     BACKWARDS                  DCK     ' ;9
  1875.  dc.b '     FIRE                       RAL     ' ;0
  1876.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1877.  dc.b '     RUN                        RSH     ' ;2
  1878.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1879.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1880.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1881.  dc.b '     DUCK                        D      ' ;6
  1882.  dc.b '     LOOK BEHIND                 L      ' ;7
  1883.  dc.b '                                        ' ;8
  1884.  dc.b '             OTHER CONTROLS             ' ;9
  1885.  dc.b '                                        ' ;0
  1886.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1887.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1888.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1889.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1890.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1891.  dc.b '                                        ' ;6
  1892.  dc.b '               MAIN  MENU               ' ;7
  1893.  dc.b '                                        ' ;8
  1894.  dc.b '                                        ' ;9
  1895.  dc.b '                                        ' ;0
  1896.  dc.b '                                        ' ;1
  1897.  
  1898. CONTROL_OPTS:
  1899.  dc.w 5,6,30,1
  1900.  dc.w 5,7,30,1
  1901.  dc.w 5,8,30,1
  1902.  dc.w 5,9,30,1
  1903.  dc.w 5,10,30,1
  1904.  dc.w 5,11,30,1
  1905.  dc.w 5,12,30,1
  1906.  dc.w 5,13,30,1
  1907.  dc.w 5,14,30,1
  1908.  dc.w 5,15,30,1
  1909.  dc.w 5,16,30,1
  1910.  dc.w 5,17,30,1
  1911.  dc.w 15,27,10,1
  1912.  dc.w -1
  1913.  
  1914. PLOPT: dc.w 0
  1915.  
  1916. INSTRUCTIONS_TXT:
  1917. ;      0123456789012345678901234567890123456789
  1918.  dc.b 'Main controls:                          ' ;1
  1919.  dc.b '                                        ' ;2
  1920.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1921.  dc.b '            Turn left / right           ' ;4
  1922.  dc.b '          Right Alt = Fire              ' ;5
  1923.  dc.b '        Right Shift = Run               ' ;6
  1924.  dc.b '                  > = Slide Left        ' ;7
  1925.  dc.b '                  ? = Slide Right       ' ;8
  1926.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1927.  dc.b '                  D = Duck              ' ;0
  1928.  dc.b '                  J = Joystick Control  ' ;1
  1929.  dc.b '                  K = Keyboard Control  ' ;2
  1930.  dc.b '                                        ' ;3
  1931.  dc.b '              1,2,3 = Select weapon     ' ;4
  1932.  dc.b '              ENTER = Toggle screen size' ;5
  1933.  dc.b '                ESC = Quit              ' ;6
  1934.  dc.b '                                        ' ;7
  1935.  dc.b '                                        ' ;8
  1936.  dc.b 'The one player game has no objective and' ;9
  1937.  dc.b 'the only way to finish is to die or quit' ;0
  1938.  dc.b '                                        ' ;1
  1939.  dc.b 'The two-player game is supposed to be a ' ;2
  1940.  dc.b 'fight to the death but will probably be ' ;3
  1941.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  1942.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  1943.  dc.b '                                        ' ;6
  1944.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  1945.  dc.b 'have glowing red walls and overhead     ' ;8
  1946.  dc.b 'lights. Useful for getting behind your  ' ;9
  1947.  dc.b ' opponent!                              ' ;0
  1948.  dc.b '  Just a taster of what is to come....  ' ;1
  1949.  dc.b '                                        ' ;0
  1950.  
  1951. INSTRUCTIONS_OPTS:
  1952.  dc.w 0,0,0,1
  1953.  dc.w -1
  1954.  
  1955. CREDITMENU_TXT:
  1956.  
  1957. ;      0123456789012345678901234567890123456789
  1958.  dc.b '    Programming, Game Code, Graphics    ' ;0
  1959.  dc.b '         Game Design and Manual         ' ;1
  1960.  dc.b '            Andrew Clitheroe            ' ;2
  1961.  dc.b '                                        ' ;3
  1962.  dc.b '             Alien Graphics             ' ;4
  1963.  dc.b '             Michael  Green             ' ;5
  1964.  dc.b '                                        ' ;6
  1965.  dc.b '           3D Object Designer           ' ;7
  1966.  dc.b '            Charles Blessing            ' ;8
  1967.  dc.b '                                        ' ;9
  1968.  dc.b '              Level Design              ' ;0
  1969.  dc.b 'Michael Green  Ben Chanter   Jackie Lang' ;1
  1970.  dc.b '     Kai Barrett Charles Blessing       ' ;2
  1971.  dc.b '                                        ' ;3
  1972.  dc.b '           Creative  Director           ' ;4
  1973.  dc.b '              Martyn Brown              ' ;5
  1974.  dc.b '                                        ' ;6
  1975.  dc.b '       Project Manager and Manual       ' ;7
  1976.  dc.b "            Martin O'Donnell            " ;8
  1977.  dc.b '                                        ' ;9
  1978.  dc.b '              Music + SFX               ' ;0
  1979.  dc.b '              Bjorn Lynne               ' ;1
  1980.  dc.b '                                        ' ;2
  1981.  dc.b '      Cover Illustration and Logo       ' ;3
  1982.  dc.b '             Kevin Jenkins              ' ;4
  1983.  dc.b '                                        ' ;5
  1984.  dc.b '      Packaging and Manual Design       ' ;6
  1985.  dc.b '               Paul Sharp               ' ;7
  1986.  dc.b '                                        ' ;8
  1987.  dc.b '             QA and Playtest            ' ;9
  1988.  dc.b '           Phil and The Wolves          ' ;0
  1989.  dc.b '                                        ' ;1
  1990.  
  1991.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  1992.  dc.b '                   by                   ' ;5
  1993.  dc.b '            Charles Blessing            ' ;6
  1994.  dc.b '                                        ' ;7
  1995.  dc.b '                Graphics:               ' ;8
  1996.  dc.b '                   by                   ' ;9
  1997.  dc.b '              Mike  Oakley              ' ;0
  1998.  dc.b '                                        ' ;1
  1999.  dc.b '             Title  Picture             ' ;2
  2000.  dc.b '                   by                   ' ;3
  2001.  dc.b '               Mike Green               ' ;4
  2002.  dc.b '                                        ' ;5
  2003.  dc.b ' Inspiration, incentive, moral support, ' ;6
  2004.  dc.b '     level design and plenty of tea     ' ;7
  2005.  dc.b '         generously supplied by         ' ;8
  2006.  dc.b '                                        ' ;9
  2007.  dc.b '              Jackie  Lang              ' ;0
  2008.  dc.b '                                        ' ;1
  2009.  dc.b '    Music for the last demo composed    ' ;2
  2010.  dc.b '       by the inexpressibly evil:       ' ;3
  2011.  dc.b '                                        ' ;8
  2012.  dc.b '            *BAD* BEN CHANTER           ' ;9
  2013.  dc.b '                                        ' ;0
  2014.  dc.b '    Sadly no room for music this time   ' ;1
  2015.  dc.b '                                        ' ;7
  2016.  dc.b '                                        ' ;7
  2017.  
  2018. CREDITMENU_OPTS:
  2019.  dc.w 0,0,1,1
  2020.  dc.w -1
  2021.  
  2022.  
  2023. ;      0123456789012345678901234567890123456789
  2024.  dc.b '                                        ' ;0
  2025.  dc.b '                                        ' ;1
  2026.  dc.b '                                        ' ;2
  2027.  dc.b '                                        ' ;3
  2028.  dc.b '                                        ' ;4
  2029.  dc.b '                                        ' ;5
  2030.  dc.b '                                        ' ;6
  2031.  dc.b '                                        ' ;7
  2032.  dc.b '                                        ' ;8
  2033.  dc.b '                                        ' ;9
  2034.  dc.b '                                        ' ;0
  2035.  dc.b '                                        ' ;1
  2036.  dc.b '                                        ' ;2
  2037.  dc.b '                                        ' ;3
  2038.  dc.b '                                        ' ;4
  2039.  dc.b '                                        ' ;5
  2040.  dc.b '                                        ' ;6
  2041.  dc.b '                                        ' ;7
  2042.  dc.b '                                        ' ;8
  2043.  dc.b '                                        ' ;9
  2044.  dc.b '                                        ' ;0
  2045.  dc.b '                                        ' ;1
  2046.  dc.b '                                        ' ;2
  2047.  dc.b '                                        ' ;3
  2048.  dc.b '                                        ' ;4
  2049.  dc.b '                                        ' ;5
  2050.  dc.b '                                        ' ;6
  2051.  dc.b '                                        ' ;7
  2052.  dc.b '                                        ' ;8
  2053.  dc.b '                                        ' ;9
  2054.  dc.b '                                        ' ;0
  2055.  dc.b '                                        ' ;1
  2056.  
  2057.  
  2058. ********************************************************
  2059.  
  2060. PUTIN32:
  2061.  move.w #31,d2
  2062. p32loop:
  2063.  moveq #0,d5
  2064.  move.l (a0)+,d3
  2065.  move.w d3,d4
  2066.  swap d3
  2067.  move.b d4,d5
  2068.  lsr.w #8,d4
  2069.  
  2070.  muls d0,d3
  2071.  muls d0,d4
  2072.  muls d0,d5
  2073.  lsr.l #8,d3
  2074.  lsr.l #8,d4
  2075.  lsr.l #8,d5
  2076.  move.w d3,d6
  2077.  swap d3
  2078.  move.w d6,d3
  2079.  move.w d4,d6
  2080.  swap d4
  2081.  move.w d6,d4
  2082.  move.w d5,d6
  2083.  swap d5
  2084.  move.w d6,d5
  2085.  and.w #%11110000,d3
  2086.  and.w #%11110000,d4
  2087.  and.w #%11110000,d5
  2088.  lsl.w #4,d3
  2089.  add.w d4,d3
  2090.  lsr.w #4,d5
  2091.  add.w d5,d3
  2092.  move.w d3,2(a1)
  2093.  swap d3
  2094.  swap d4
  2095.  swap d5
  2096.  and.w #%1111,d3
  2097.  and.w #%1111,d4
  2098.  and.w #%1111,d5
  2099.  lsl.w #8,d3
  2100.  lsl.w #4,d4
  2101.  add.w d4,d3
  2102.  add.w d5,d3
  2103.  move.w d3,2+(132*4)(a1)
  2104.  addq #4,a1
  2105.  dbra d2,p32loop
  2106.  
  2107.  
  2108.  rts
  2109.  
  2110. **************************************
  2111.  
  2112. FADEAMOUNT: dc.w 0
  2113. FADEVAL: dc.w 0
  2114.  
  2115. FADEUPTITLE:
  2116.  
  2117.  move.w FADEVAL,d0
  2118.  move.w FADEAMOUNT,d1
  2119. fadeuploop:
  2120.  
  2121.  move.l #TITLEPAL,a0
  2122.  move.l #TITLEPALCOP,a1
  2123.  
  2124. wvb:
  2125.  btst #5,$dff000+intreqrl
  2126.  beq.s wvb
  2127.  move.w #$20,$dff000+intreq 
  2128.  
  2129.  bsr PUTIN32
  2130.  add.w #4,a1
  2131.  bsr PUTIN32
  2132.  add.w #4,a1
  2133.  bsr PUTIN32
  2134.  add.w #4,a1
  2135.  bsr PUTIN32
  2136.  
  2137.  addq.w #4,d0
  2138.  dbra d1,fadeuploop
  2139.  
  2140.  subq #4,d0
  2141.  move.w d0,FADEVAL
  2142.  
  2143.  rts
  2144.  
  2145. CLEARTITLEPAL:
  2146.  PRSDP
  2147.  move.l #TITLEPALCOP,a0
  2148.  move.w #7,d1
  2149. clrpal:
  2150.  move.w #31,d0
  2151. clr32
  2152.  move.w #0,2(a0)
  2153.  addq #4,a0
  2154.  dbra d0,clr32
  2155.  addq #4,a0
  2156.  dbra d1,clrpal
  2157.  PRSDQ
  2158.  rts
  2159.  
  2160. FADEDOWNTITLE:
  2161.  
  2162.  move.w FADEVAL,d0
  2163.  move.w FADEAMOUNT,d1
  2164. fadedownloop:
  2165.  
  2166.  move.l #TITLEPAL,a0
  2167.  move.l #TITLEPALCOP,a1
  2168.  
  2169. .wvb:
  2170.  btst #5,$dff000+intreqrl
  2171.  beq.s .wvb
  2172.  move.w #$20,$dff000+intreq 
  2173.  
  2174.  bsr PUTIN32
  2175.  add.w #4,a1
  2176.  bsr PUTIN32
  2177.  add.w #4,a1
  2178.  bsr PUTIN32
  2179.  add.w #4,a1
  2180.  bsr PUTIN32
  2181.  
  2182.  subq.w #4,d0
  2183.  dbra d1,fadedownloop
  2184.  
  2185.  addq #4,d0
  2186.  move.w d0,FADEVAL
  2187.  
  2188.  rts
  2189.  
  2190. LOADTITLESCRN2:
  2191.  
  2192.  move.l #TITLESCRNNAME2,d1
  2193.  move.l #1005,d2
  2194.  move.l doslib,a6
  2195.  jsr -30(a6)
  2196.  move.l d0,handle
  2197.  move.l d0,d1
  2198.  move.l doslib,a6
  2199.  move.l TITLESCRNADDR,d2
  2200.  move.l #10240*7,d3
  2201.  jsr -42(a6)
  2202.  move.l doslib,a6
  2203.  move.l handle,d1
  2204.  jsr -36(a6)
  2205.  
  2206.  rts
  2207.  
  2208.  
  2209. GETTITLEMEM:
  2210.  move.l #2,d1
  2211.  move.l #10240*7,d0
  2212.  move.l 4.w,a6
  2213.  jsr -198(a6)
  2214.  move.l d0,TITLESCRNADDR
  2215.  
  2216.  move.l #$dff000-$2cdfe4,a4
  2217.  
  2218.  move.l #2,d1
  2219.  move.l #258*16*5,d0
  2220.  move.l 4.w,a6
  2221.  jsr -198(a6)
  2222.  move.l d0,OPTSPRADDR
  2223.  
  2224.  rts
  2225.  
  2226. ProtChkJLev1:
  2227.  
  2228. PROTSETUP:
  2229.  incbin "ab3:includes/protsetupenc"
  2230.  
  2231. ; Need to: Decode protection calling
  2232. ; routine
  2233. ; use null values to call it and erase
  2234. ; it from memory
  2235. ; erase this routine and return.
  2236.  
  2237. ; include "ab3:source/protsetup"
  2238.  
  2239.  
  2240. RELEASETITLEMEM:
  2241.  move.l TITLESCRNADDR,d1
  2242.  move.l d1,a1
  2243.  move.l #10240*7,d0
  2244.  move.l 4.w,a6
  2245.  jsr -210(a6)
  2246.  
  2247.  move.l OPTSPRADDR,d1
  2248.  move.l d1,a1
  2249.  move.l #258*80,d0
  2250.  move.l 4.w,a6
  2251.  jsr -210(a6)
  2252.  rts
  2253.  
  2254.  
  2255. PROTCALLENC:
  2256. ; incbin "ab3:source/protcallenc.bin
  2257.  
  2258. ; one pass, all instructions executed.
  2259. ; must call protection routine,store
  2260. ; value somewhere, call ask routine,
  2261. ; compare returned value, if correct
  2262. ; set up all values, then return.
  2263.  
  2264.  include "ab3:source/protcallenc"
  2265.  
  2266. ENDPROT:
  2267.  
  2268. LOADTITLESCRN:
  2269.  
  2270.  move.l #TITLESCRNNAME,d1
  2271.  move.l #1005,d2
  2272.  move.l doslib,a6
  2273.  jsr -30(a6)
  2274.  move.l d0,handle
  2275.  move.l d0,d1
  2276.  move.l doslib,a6
  2277.  move.l TITLESCRNADDR,d2
  2278.  move.l #10240*7,d3
  2279.  jsr -42(a6)
  2280.  move.l doslib,a6
  2281.  move.l handle,d1
  2282.  jsr -36(a6)
  2283.  
  2284.  rts
  2285.  
  2286. RVAL2: dc.w 0
  2287.  
  2288. SETUPTITLESCRN:
  2289.  
  2290.  PRSDR
  2291.  move.l #OPTCOP,a0
  2292.  move.l #rain,a1
  2293.  move.w #255,d0
  2294. putinrain:
  2295.  move.w (a1)+,d1
  2296.  move.w d1,6(a0)
  2297.  move.w d1,6+4(a0)
  2298.  move.w d1,6+8(a0)
  2299.  move.w d1,6+12(a0)
  2300.  add.w #4*14,a0
  2301.  
  2302.  dbra d0,putinrain
  2303.  
  2304. ; Put addr into copper.
  2305.  move.l OPTSPRADDR,d0
  2306.  move.w d0,tsp0l
  2307.  swap d0
  2308.  move.w d0,tsp0h
  2309.  swap d0
  2310.  add.l #258*16,d0
  2311.  move.w d0,tsp1l
  2312.  swap d0
  2313.  move.w d0,tsp1h
  2314.  swap d0
  2315.  add.l #258*16,d0
  2316.  move.w d0,tsp2l
  2317.  swap d0
  2318.  move.w d0,tsp2h
  2319.  swap d0
  2320.  add.l #258*16,d0
  2321.  move.w d0,tsp3l
  2322.  swap d0
  2323.  move.w d0,tsp3h
  2324.  swap d0
  2325.  add.l #258*16,d0
  2326.  move.w d0,tsp4l
  2327.  swap d0
  2328.  move.w d0,tsp4h
  2329.  
  2330.  move.l #nullspr,d0
  2331.  move.w d0,tsp5l
  2332.  move.w d0,tsp6l
  2333.  move.w d0,tsp7l
  2334.  swap d0
  2335.  move.w d0,tsp5h
  2336.  move.w d0,tsp6h
  2337.  move.w d0,tsp7h 
  2338.  
  2339.  move.l TITLESCRNADDR,d0
  2340.  move.w d0,ts1l
  2341.  swap d0
  2342.  move.w d0,ts1h
  2343.  swap d0
  2344.  add.l #10240,d0
  2345.  move.w d0,ts2l
  2346.  swap d0
  2347.  move.w d0,ts2h
  2348.  swap d0
  2349.  add.l #10240,d0
  2350.  move.w d0,ts3l
  2351.  swap d0
  2352.  move.w d0,ts3h
  2353.  swap d0
  2354.  add.l #10240,d0
  2355.  move.w d0,ts4l
  2356.  swap d0
  2357.  move.w d0,ts4h
  2358.  swap d0
  2359.  add.l #10240,d0
  2360.  move.w d0,ts5l
  2361.  swap d0
  2362.  move.w d0,ts5h
  2363.  swap d0
  2364.  add.l #10240,d0
  2365.  move.w d0,ts6l
  2366.  swap d0
  2367.  move.w d0,ts6h
  2368.  swap d0
  2369.  add.l #10240,d0
  2370.  move.w d0,ts7l
  2371.  swap d0
  2372.  move.w d0,ts7h
  2373.  rts 
  2374.  
  2375. RVAL1: dc.w 0
  2376.  
  2377. DummyAdds:
  2378.  dc.l dummy-78935450
  2379.  dc.l dummy-78935450
  2380.  dc.l dummy-78935450
  2381.  dc.l dummy-78935450
  2382.  dc.l dummy-78935450
  2383.  dc.l dummy-78935450
  2384.  dc.l dummy-78935450
  2385.  dc.l dummy-78935450
  2386.  dc.l dummy-78935450
  2387.  dc.l dummy-78935450
  2388.  
  2389. dummycall
  2390.  dc.w $4e75-123
  2391.  
  2392. protspace: ds.l 200
  2393.  
  2394.  include "ab3:source/LEVEL_BLURB"
  2395.  
  2396. font:
  2397.  incbin "OptFont"
  2398.  
  2399. rain: incbin "optcop"
  2400.